package br.com.sgac.controler;

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.sgac.dao.CidadeDAO;
import br.com.sgac.dao.FuncionarioDAO;
import br.com.sgac.dao.PerfilDAO;
import br.com.sgac.dao.UsuarioDAO;
import br.com.sgac.model.Cidade;
import br.com.sgac.model.Endereco;
import br.com.sgac.model.Funcionario;
import br.com.sgac.model.Perfil;
import br.com.sgac.model.Usuario;

/**
 * Servlet implementation class UsuarioServlet
 */
@WebServlet("/UsuarioServlet")
public class UsuarioServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	UsuarioDAO usuarioDAO = new UsuarioDAO();
    PerfilDAO perfilDAO = new PerfilDAO();
    CidadeDAO cidadeDAO = new CidadeDAO();
    FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
    
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UsuarioServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String editar = request.getParameter("editar");
	    Perfil perfil = new Perfil();
	    Usuario usuario = new Usuario();
	    Funcionario funcionario = new Funcionario();
	    List<Perfil> perfils = new ArrayList<Perfil>();
	    List<Usuario> usuarios = new ArrayList<Usuario>();
	    
	    usuarios = usuarioDAO.findAll();
		perfils = perfilDAO.findAll();
		
		request.setAttribute("usuarios",usuarios);
		request.setAttribute("perfils", perfils);
		
		if(editar!=null){
			funcionario = funcionarioDAO.findFuncionarioByUsuarioId(editar);
			request.setAttribute("funcionario", funcionario);
			request.setAttribute("acao","Alterar");
		}else{
			request.setAttribute("acao","Cadastrar");
		}
		RequestDispatcher rd = request.getRequestDispatcher("app/FormCadUsuario.jsp");
		rd.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Funcionario funcionario = new Funcionario();
		Endereco endereco = new Endereco();
		Usuario usuario = new Usuario();
		Cidade cidade = new Cidade();
		Perfil perfil = new Perfil();
		
		Calendar cal = Calendar.getInstance();
		Date data;
		DateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
		String acao = request.getParameter("acao");
		funcionario = (Funcionario)request.getAttribute("funcionario");
		endereco = (Endereco) request.getAttribute("endereco");
		usuario = (Usuario) request.getAttribute("usuario");

		funcionarioDAO.begin();
		
		try {
			data = formatador.parse(funcionario.getdNascimento());
			cal.setTime(data);
			funcionario.setDataNascimento(cal);
			perfil = perfilDAO.findPerfilById(usuario.getIdPerfil());
			funcionario.setEndereco(endereco);
			usuario.setPerfil(perfil);
			funcionario.setUsuario(usuario);
			
			if(acao.equals("Cadastrar")){
				funcionarioDAO.persist(funcionario);
			}else if(acao.equals("Alterar")){
				funcionarioDAO.merge(funcionario);
			}
			funcionarioDAO.commit();
			funcionarioDAO.close();
		} catch (ParseException e) {
			e.printStackTrace();
		}
		doGet(request, response);
	}

}
